优化网格

您可以减少 Kanzi 应用程序显示的网格中的顶点数据量,以提高应用程序的性能。当减少网格顶点数据量时,kzb 文件的大小和运行时所需的 GPU 内存量都会减小。

编辑网格特性

您可以使用 网格特性编辑器 (Mesh Attributes Editor) 更改网格的顶点数据。
例如,您可以使用 网格特性编辑器 (Mesh Attributes Editor) 移除不使用的特性,并根据您的需求选择最佳的数据类型。

要编辑网格特性:

  1. 素材库 (Library) > 网格 (Meshes) 中右键点击要编辑的网格,然后选择打开网格特性编辑器 (Open Mesh Attributes Editor)
    网格特性编辑器 (Mesh Attributes Editor) 中,导入 (Import) 表格会在您将网格导入到 Kanzi Studio 时显示网格特性的语义、维数和数据范围。
  2. 导出 (Export) 表格中的网格特性编辑器 (Mesh Attributes Editor) 中,设置这些特性,以控制 Kanzi Studio 如何将网格导出到 kzb 文件:

    如果要导出的 kzb 文件具有您目前在 导出 (Export) 表格中设置的值,则网格特性编辑器 (Mesh Attributes Editor) 底部的状态栏会显示网格顶点数据的大小。

设置顶点缓存的正确大小

GPU 具有特定大小的顶点缓存。访问缓存中的网格顶点要比访问存储器中其他位置的顶点快一个数量级。您可以重新排列顶点缓冲区中的顶点和索引,以使缓存达到最佳值,从而为特定的缓存大小优化网格数据。

例如,16 字节的顶点缓存可以存储位置 + 法线 + 纹理坐标 (XYZ * 2 + XYZ * 2 + UV * 2),但不足以存储位置 + 法线 + 纹理坐标 + 颜色。

要为您的目标硬件设置正确的顶点缓存大小:

  1. 了解您的目标硬件的顶点缓存大小。
  2. Kanzi Studio 中选择工程 (Project) > 属性 (Properties) 并在二进制导出 (Binary Export) 属性的属性 (Properties) 中设置:

为网格特性设置最佳的数据类型

为了优化您的网格,请为每个网格特性设置占据最少空间但能够提供足够高的视觉精度以满足您需求的数据类型。Kanzi 在将特性存储到 GPU 内存和将其导出到 kzb 文件时使用数据类型。当使用占据最少空间的数据类型时,kzb 文件的大小和运行时所需的 GPU 内存量都会减小。请参阅 网格特性的数据类型

要为网格特性设置最佳的数据类型:

  1. 素材库 (Library) > 网格 (Meshes) 中右键点击要编辑的网格,然后选择打开网格特性编辑器 (Open Mesh Attributes Editor)
  2. 导入 (Import) 表格中的网格特性编辑器 (Mesh Attributes Editor) 中,为要设置的数据类型的特性检查数据范围 (Data Range) 列中的值。
    Kanzi Studio 会使用不同的颜色标记网格特性不同维度的数据范围。
  3. 导出 (Export) 表格中的网格特性编辑器 (Mesh Attributes Editor) 中,使用数据类型 (Data Type) 列中的下拉列表来设置导出数据类型。
    当设置数据类型时,请记住:

网格特性的数据类型

表格列出了 Kanzi 支持的网格特性数据类型。

      目标图形 API (Target Graphics API) 的可用性
数据类型 描述 (Description) 范围 OpenGL ES 2.0 OpenGL ES 2.0 扩展包 (OpenGL ES 2.0 Extension Pack) OpenGL ES 3
浮点 (Float) 单精度浮点值(32 位)   x x x
半浮点 (Half-float) 半精度浮点值(16 位)     x x
8_SNORM 8 位有符号规范化数值 -1.0f ...1.0f x x x
8_UNORM 8 位无符号规范化数值 0.0f ...1.0f x x x
16_SNORM 16 位有符号规范化数值 -1.0f ...1.0f x x x
16_UNORM 16 位无符号规范化数值 0.0f ...1.0f x x x
8_SINT 8 位有符号整数 -128 ...127     x
8_UINT 8 位无符号整数 0 ...255     x
16_SINT 16 位有符号整数 -32768 ...32767     x
16_UINT 16 位无符号整数 0 ...65,535     x
32_SINT 32 位有符号整数 -2147483648 ...2147483647     x
32_UINT 32 位无符号整数 0 ...4 294 967 295     x
32_SNORM 32 位有符号规范化数值 -1.0f ...1.0f     x
32_UNORM 32 位无符号规范化数值 0.0f ...1.0f     x
2_10_10_10_SNORM_PACK32 四分量 32 位带符号的规范化压缩数值,带有:
  • 10 位 X 分量,0..9 位
  • 10 位 Y 分量,10..19 位
  • 10 位 Z 分量,20..29 位
  • 2 位 W 分量,30..31 位
(-1, -1, -1, -1) ...(1, 1, 1, 1)     x
2_10_10_10_UNORM_PACK32 四分量 32 位不带符号的规范化压缩数值:
  • 10 位 X 分量,0..9 位
  • 10 位 Y 分量,10..19 位
  • 10 位 Z 分量,20..29 位
  • 2 位 W 分量,30..31 位
(0, 0, 0, 0) ...(1, 1, 1, 1)     x
           

另请参阅

使用网格

网格最佳实践

编辑着色器

在 Kanzi 中使用 OpenGL ES 3.0